Last Updated: 2020-01-11

References: FLAC 8.1 Manual: User's Guide Problem Solving with FLAC; Command Reference; Fish in FLAC

This tutorial will provide background on how to initialize stress and porewater pressure conditions in FLAC. The tutorial will also cover user-defined FISH functions for estimating these initial conditions.

What are initial conditions?

Anytime we model a geotechnical problem in FLAC, we need to specify initial conditions. The initial conditions are generally:

We are going to focus on initial stresses and porewater pressures since initial gridpoint velocities were mostly covered in 2.1 FLAC Boundary Conditions.

Initial conditions are assigned throughout the model, interior to the model boundaries.

What you'll learn

This tutorial does not discuss groundwater flow boundary conditions. These will come in future classes!

It is very useful to specify the initial conditions in a user-defined fish function. This makes it easy to change simulation parameters and make sure that they are consistent in other parts of the model.

For example, if you are simulating a laboratory triaxial compression test with total vertical stress = 200 kPa, ko = 0.5, and initial pore pressure = 100, a function to define parameters might look like:

def $problem_definitions 
   $ko = 0.5           ;;[], lateral coefficient of stress
   $syy_ini = -200.    ;;[kPa], initial total axial stress
   $pp_ini = 100.      ;;[kPa], initial porewater pressure


   ;;;calculate initial radial stress from $ko, $syy_ini, and $pp_ini
   $esyy_ini = $syy_ini + $pp_ini    ;;[kPa], initial effective axial stress
   $esxx_ini = $esyy_ini*ko     ;;[kPa], initial effective radial stress
   $sxx_ini = $esxx_ini - $pp_ini  ;;[kPa], initial total radial stress

end
$problem_definitions

Side note on boundary conditions: Using a program definition like this means that you can also use these parameters for boundary conditions. Since this is triaxial compression loading, the boundary conditions would be:

apply sxx $sxx_ini i=gpi j=1,gpj

apply syy $syy_ini i=1,gpi j=gpj

fix x i=1

fix y j=1

The initial conditions must be assigned before the simulations are carried out. There are a few things to keep in mind:

The ini command is used for this. If the stresses are uniform throughout the model, then you don't need to give a gridpoint range. For example:

ini sxx $sxx_ini

ini syy $syy_ini

ini szz $szz_ini

ini pp $pp_ini

If stress gradients need to be initialized for a soil profile, then the var command is included with ini.

define $problem_definition
        $K0 = 0.5                                ;[], consolidation ratio
        $grav = 10.
     $wt_depth = 0.     ;[m], depth from surface to water table
        $Ho = 6.5                ;[m], model height
        

     $void_ratio = 1.2        ;[]
        $rho_water = 1.                ;[Mg/m^3]
        $Gs = 2.5                        ;[],rho_solids/rho_water (specific gravity of solids)
        ;;calculate the bulk density from specific gravity, water density, and void ratio
        $rho_total = ($Gs*$rho_water+($void_ratio))/(1.+$void_ratio)                        ;[Mg/m^3]        
end
$problem_definition        

def $initial_conditions

        $syy_bot = -1.*$Ho*$rho_total*$grav   ;;[kPa], total vertical stress at the bottom of the model
        $syy_var = -1.*$syy_bot - 0.   ;;[kPa], difference between total vertical stress at the top of the model and bottom of the model
        $pp_bot = ($Ho-$wt_depth)*$rho_water*$grav  ;;[kPa], pore pressure at the bottom of the model
        $pp_var = -1*$pp_bot   ;;[kPa], difference between porewater pressure at the bottom of the model and top of the model
        
        $syy_p_bot = $pp_bot + $syy_bot ;;[kPa], vertical effective stress at bottom
        
        $sxx_p_bot = $syy_p_bot*$K0  ;;[kPa], horiz. Effective stress at bottom
        $sxx_bot = $sxx_p_bot - $pp_bot ;;[kPa], horiz. Total stress at bottom
        $sxx_var = -1.*$sxx_bot
        
        
        command
                ini pp $pp_bot         var 0.,$pp_var           j=1,$zj  ;;$zj is number of zones in the j direction
                ini syy $syy_bot                 var 0.,$syy_var        j=1,$zj
                ini sxx $sxx_bot                var 0.,$sxx_var        j=1,$zj
                ini szz $sxx_bot                var 0.,$sxx_var         j=1,$zj
        
        end_command        

end
$initial_conditions

For this example, the ini commands are called from within the $initial_conditions user-defined function.

Laboratory element simulations

Laboratory element simulations capture the loading conditions we test soil under in the lab. This is characterized by assuming uniform stresses throughout the element. Often we capture these conditions with single element simulations (using only one model zone).

This example is applicable to simulations of triaxial compression, direct simple shear, triaxial extension, 1D compression, and other laboratory test conditions.

def $ini_conditions
        $syy_ini = 125.                ;[kPa], initial total vertical stress
        $sxx_ini = 175.                ;[kPa], initial total horizontal stress
        $pp_ini = 50.                ;[kPa], initial porewater pressure
        
        command
                ini sxx $sxx_ini
                ini syy $syy_ini
                ini szz $sxx_ini
                ini pp         $pp_ini
        end_command
end
$ini_conditions

Field conditions

In most geotechnical field conditions, we need to account for the stress gradients with depth.

def $prob_defs

        $rho_total = 1.8                ;[Mg/m^3], total density
        $top_elev = 0.                ;[m], elevation of top of model boundary
        $bot_elev = -10.        ;[m], elevation of model bottom boundary
        $rho_water = 1.0                ;[Mg/m^3], water density
        
        $ko = 0.5                                ;[], lateral stress coefficient
                
        $grav = 10.                                ;[m/s^2], gravitational acceleration

end
$prob_defs

def $ini_conditions
        $syy_bot = ($top_elev - $bot_elev)*$rho_total*$grav                ;[kPa], total vertical stress at bottom boundary
        $pp_bot = -1.($top_elev - $bot_elev)*$rho_water*$grav        ;[kPa], pore pressure at bottom boundary
        $sxx_bot = ($ko*($syy_bot + $pp_bot))-$pp_bot        ;[kPa], total horizontal stress at bottom boundary
                
        $syy_var = -1.*$syy_bot        ;[kPa], variation of syy between top and bottom boundary
        $sxx_var = -1.*$sxx_bot        ;[kPa], variation of sxx between top and bottom boundary
        $pp_var = -1.*$pp_bot        ;[kPa], variation of pp between top and bottom
end
$ini_conditions

ini pp $pp_bot                 var 0.,$pp_var j=1,jzones
ini sxx $sxx_bot         var 0.,$sxx_var j=1,jzones
ini szz $sxx_bot         var 0.,$szz_var j=1,jzones
ini syy $syy_bot         var 0.,$syy_var j=1,jzones

Initial conditions review quiz